package com.tallerdealejandria.util;

import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/**
 *
 * @author Oathmind
 */
public class Mapeador {

    private ArrayList<Mapeo> mapeos;

    public Mapeador() {
        mapeos = new ArrayList<Mapeo>();
    }

    public void generarMapeo() {
        try {
            File mapeos = new File(getClass().getResource("xml/mapeos.xml").toURI());
            load(mapeos);
        } catch (URISyntaxException ex) {
            Logger.getLogger(Mapeador.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public ArrayList<Mapeo> getMapeos() {
        return mapeos;
    }

    private void load(File file) {
        mapeos.clear();
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            Document documento = null;
            DocumentBuilder builder = factory.newDocumentBuilder();
            documento = builder.parse(file);
            if (documento != null) {
                NodeList mapeosXML = documento.getElementsByTagName("mapeo");
                for (int i = 0; i < mapeosXML.getLength(); i++) {
                    Mapeo mapeo = new Mapeo();
                    Node mapeoActual = mapeosXML.item(i);
                    NodeList propiedades = mapeoActual.getChildNodes();
                    for (int j = 1; j < propiedades.getLength(); j++) {
                        Node propiedad = propiedades.item(j);
                        if (propiedad.getNodeType() != Element.TEXT_NODE) {
                            if (propiedad.getNodeName().equalsIgnoreCase("accion")) {
                                mapeo.setAccion(propiedad.getTextContent());
                            } else if (propiedad.getNodeName().equalsIgnoreCase("titulo")) {
                                mapeo.setTitulo(propiedad.getTextContent());
                            } else if (propiedad.getNodeName().equalsIgnoreCase("pagina")) {
                                mapeo.setPagina(propiedad.getTextContent());
                            } else if (propiedad.getNodeName().equalsIgnoreCase("template")) {
                                mapeo.setUsarTemplate(propiedad.getTextContent().equalsIgnoreCase("true"));
                            }
                        }
                    }
                    mapeos.add(mapeo);
                }
            }
        } catch (SAXException ex) {
            Logger.getLogger(Mapeador.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Mapeador.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ParserConfigurationException ex) {
            Logger.getLogger(Mapeador.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
